package Controle;

import util.Constantes;
import javax.swing.JOptionPane;

import util.Mensagem;

import Jplay.Animation;
import Jplay.GameImage;
import Jplay.Mouse;
import Jplay.Window;
import MotorGrafico.InterfaceTela;
import MotorGrafico.MotorGrafico;

/**
 * Respons�vel por apresentar o menu.
 * 
 * @author Gefersom C. Lima
 * 
 */
public class TelaMenu implements InterfaceTela {

	GameImage fundo;
	Animation botaoSom;
	Animation botaoSair;
	Animation botaoRestaurar;
	Animation botaoSalvar;
	Animation botaoVoltar;
	Animation botaoNivel;

	boolean sair;
	boolean som;
	boolean restaurar;
	boolean salvar;
	boolean voltar;
	boolean nivel;

	Mouse mouse;

	/**
	 * Carrega os objetos usados na mem�ria.
	 */

	@Override
	public void carregar() {
		fundo = new GameImage(Constantes.IMG_TELA_MENU_FUNDO);
		botaoSair = new Animation(Constantes.IMG_TELA_MENU_BTN_SAIR, 2);
		botaoSom = new Animation("img/menu/desligar_som.png", 2);
		botaoSalvar = new Animation("img/menu/salvar_jogo.png", 2);
		botaoRestaurar = new Animation("img/menu/restaurar_jogo.png", 2);
		botaoVoltar = new Animation(Constantes.IMG_TELA_ESTADO_JOGO_BTN_VOLTAR,
				2);
		botaoNivel = new Animation(Constantes.IMG_TELA_MENU_BTN_NIVEL, 2);

		int y = 140;
		int x = 220;
		botaoRestaurar.setPosition(x, y);
		botaoSalvar.setPosition(x, y + botaoSom.height * 1);
		botaoSom.setPosition(x, y + botaoSair.height * 2);
		botaoNivel.setPosition(x, y + botaoSom.height * 3);
		botaoVoltar.setPosition(x, y + botaoRestaurar.height * 4);
		botaoSair.setPosition(x, y + botaoSalvar.height * 5);

		fundo.setPosition(x - 30, y - 20);

		mouse = MotorGrafico.getInstancia().getJanela().getMouse();
	}

	/**
	 * Descarrega os objetos da mem�ria.
	 */
	@Override
	public void descarregar() {
		// TODO Auto-generated method stub
	}

	/**
	 * Controla a l�gica do menu.
	 */
	@Override
	public void logica() {
		botaoSom.setCurrFrame(0);
		botaoSair.setCurrFrame(0);
		botaoRestaurar.setCurrFrame(0);
		botaoVoltar.setCurrFrame(0);
		botaoSalvar.setCurrFrame(0);
		botaoNivel.setCurrFrame(0);

		if (mouse.isOverObject(botaoSom)) {
			botaoSom.setCurrFrame(1);
			if (mouse.isLeftButtonPressed() == true)
				som = true;
		}

		if (mouse.isOverObject(botaoSair)) {
			botaoSair.setCurrFrame(1);
			if (mouse.isLeftButtonPressed() == true)
				sair = true;
		}

		if (mouse.isOverObject(botaoRestaurar)) {
			botaoRestaurar.setCurrFrame(1);
			if (mouse.isLeftButtonPressed() == true)
				restaurar = true;
		}

		if (mouse.isOverObject(botaoVoltar)) {
			botaoVoltar.setCurrFrame(1);
			if (mouse.isLeftButtonPressed() == true)
				voltar = true;
		}

		if (mouse.isOverObject(botaoSalvar)) {
			botaoSalvar.setCurrFrame(1);
			if (mouse.isLeftButtonPressed() == true)
				salvar = true;
		}

		if (mouse.isOverObject(botaoNivel)) {
			botaoNivel.setCurrFrame(1);
			if (mouse.isLeftButtonPressed() == true)
				nivel = true;
		}

	}

	/**
	 * Desenha as imagens na tela.
	 */
	@Override
	public void desenhar() {
		fundo.draw();
		botaoSom.draw();
		botaoSair.draw();
		botaoSalvar.draw();
		botaoRestaurar.draw();
		botaoVoltar.draw();
		botaoNivel.draw();
	}

	/**
	 * Seta a pr�xima tela a ser executada.
	 */
	@Override
	public void proxTela() {

		if (sair == true) {
			if (Mensagem.mostrarMsnConfirmacao("Deseja sair?", "Sair do Jogo") == JOptionPane.OK_OPTION)
				MotorGrafico.getInstancia().getJanela().exit();
			sair = false;
		}

		if (restaurar == true || salvar == true) {
			MotorGrafico.getInstance().setProxTela(
					Constantes.TELA_ESTADOS_SALVOS);

			TelaEstados tes = (TelaEstados) MotorGrafico.getInstance().getTela(
					Constantes.TELA_ESTADOS_SALVOS);

			if (restaurar == true)
				tes.setAcaoAbrir();
			else
				tes.setAcaoSalvar();
		}

		if (voltar) {
			MotorGrafico.getInstance().setProxTela(Constantes.TELA_JOGAR);
			TelaJogo tj = (TelaJogo) MotorGrafico.getInstance().getTela(
					Constantes.TELA_JOGAR);
			tj.getEstado().continuarContagemTempo();
		}

		if (nivel) {
			MotorGrafico.getInstance()
					.setProxTela(Constantes.TELA_NIVEL_JOGADA);
		}

		nivel = false;
		restaurar = false;
		salvar = false;
		sair = false;
		voltar = false;

	}

}
